# 05shuju-变量
# 定义变量
name = "张三"
print(name)

# 定义变量不能使用数字开头如：123
# 123name = "李四"

# 不能使用python内置关键字
# class = "python"
# 严格区分大小写  name == NAME
NAME = "王五"

# 不建议使用中文
标识符 = "aaa"
print(标识符)

# 标识符命名习惯
# 作用：行业内约定俗成的一种规范
# 大驼峰：常用于类命名
# 小驼峰：常用于项目命名
# 下划线命名：常用于变量/函数/方法/文件等
MyName = "小苏"
myName = "小苏"
my_name = "小苏"

# 02-强制类型转换
# 定义数据：num1和num2都是字符串类型（str）
num1 = "100"
num2 = "1.99"
# 打印原始类型：都是str
print(type(num1))
print(type(num2))
# 强制类型转换
print(type(int(num1)))  # 把"100"转成整数int，输出：<class 'int'>
print(type(float(num2)))  # 把"1.99"转成浮点数float，输出：<class 'float'>
print(type(float(num1)))  # 把"100"转成浮点数float（100.0），输出：<class 'float'>

# 整数、列表的类型转换
info = 12345  # 整数类型（int）
print(type(info))

# 列表类型（list，可包含多种数据类型）
info1 = [11, "aa", True, 1.88]
print(type(info1))

# 列表转字符串（str）
print(type(str(info1)))
print(str(info1))

# 列表转元组（tuple）
print(type(tuple(info1)))
print(tuple(info1))

# 列表转集合（set）
info2 = [11, 22, 33, 11, 11, 33, 44]
print(info2)
print(set(info2))
print(type(set(info2)))

# 03-数据类型
# 数字型
a = 100
b = 1.88
c = True
d = False
# 查看数据类型
print(type(100))  # 整数 ：<class 'int'>
print(type(a))
print(type(b))  # 浮点数（小数）：<class 'float'>
print(type(c))  # 布尔值：<class 'bool'> ---->boolean

# 非数字型
# 字符串
e = "hello world"
# 列表
f = [1, 2, 3, 4, 5]
# 元组
g = (2, 3, 4, 5, 6)
# 集合
h = {3, 4, 5, 6, 7}
# 字典
i = {"name": "张三", "age": 18}

# 查看数据类型
print(type(e))  # 字符串：<class 'str'>
print(type(f))  # 列表：<class 'list'>
print(type(g))  # 元组：<class 'tuple'>
print(type(h))  # 集合：<class 'set'>
print(type(i))  # 字典：<class 'dict'> -----> dictionary

# 数据类型
info1 = {"a1": 112, "a2": "test", "a3": [1, 2, 3, 4, 5], "a4": (2, 3, 4, 5), "a5": {3, 5, 6, 7}}
print(info1)
info2 = (1, 2, 3, [2, 3, 4, 5], {4, 5, 6, 7})
print(type(info2))
print(type(info1))

# 04-程序的输出
# 需求：小明今年18岁了，他的身高是1.80米
# 定义变量
name = "小明"
age = 18
age1 = str(age)  # str(age)  将变量age整数类型强制转换为字符串
height = 1.80
# 控制台输出：小明今年18岁了
# print("小明今年18岁了")

# 按照字符串拼接格式输出，增加代码灵活性
# print(name + "今年" + str(age) + "岁了")
# print(name + "今年" + age1 + "岁了")

# 使用format函数输出，字符串类型数据格式化输出
# 表示方式："{}".format(变量名)
# 1
# print("{}今年{}岁了".format(name,age))
# print("{0}今年{1}岁了".format(name,age))
# {}在字符串中相当于占位符号，如果是多个变量，可以在{}中写数字

# f格式输出
# 表示方式：f"{变量名}"
# 通过f格式化输出
print(f"{name}今年{age}岁了，他的身高是{height}米")
# 小明明年就19岁了
print(f"{name}明年就{age + 1}岁了")

# 05-程序的输入
# 输入小明同学的年龄
name = "小明"
age = int(input("请输入年龄："))  # 输入任意数据都会当做字符串处理 "23"
print(f"{name}同学的年龄是：{age}")
print(f"{name}同学明年的年龄是：{age + 1}")

# 案例演示-06运算符
num1 = 10
num2 = 20
# 常规计算
print(f"求和结果：{num1 + num2}")  # 30
print(f"求差结果：{num1 - num2}")  # -10
print(f"求乘结果：{num1 * num2}")  # 200
print(f"求除结果：{num1 / num2}")  # 0.5
print(f"求商结果：{num1 // num2}")  # 0
print(f"求余结果：{num1 % num2}")  # 10

# 特殊场景
# 求余数常常运用奇偶数判断
print(3 % 2 == 0)
# # 幂运算：10的3次方
print(10 ** 3)
# # 特殊的求和: 字符串和字符串求和  -- > 字符串拼接
print("10" + "20")
# # 特殊的乘法：字符串和数字相乘  -- > 字符串重复多少次
print("10" * 3)

# 07-比较运算符
num1 = 10
num2 = 20
print(f"{num1 == num2}")  # False
print(f"{num1 != num2}")  # True
print(f"{num1 > num2}")  # False
print(f"{num1 < num2}")  # True
print(f"{num1 >= num2}")  # False
print(f"{num1 <= num2}")  # True

print(10 == "10")
# 数字和字符串比较结果一定是False


# 08-赋值运算符
# 定义两个数字
num1 = 10
num2 = 20
# 赋值运算并查看结果
num1 += num2  # 相当于 num1 = num1 + num2
print("num1 =", num1)  # 此时：num1 = 30
num1 -= num2  # 相当于 num1 = num1 - num2
print("num1 =", num1)  # 此时：num1 = 10
num1 *= num2  # 相当于 num1 = num1 * num2
print("num1 =", num1)  # 此时：num1 = 200
num1 /= num2  # 相当于 num1 = num1 / num2
print("num1 =", num1)  # 此时：num1 = 10.0
num1 %= num2  # 相当于 num1 = num1 % num2
print("num1 =", num1)  # 此时：num1 = 10
# 结论：
# 先运算再赋值，注意前后变量次序
# python默认按照行顺序执行代码
# 应用场景：累计求和/差/积等场景使用

num3 = 10
num4 = 10
num3 %= num4  # 相当于 num3 = num3 % num4
print("num3 =", num3)  # 此时：num1 = 10

# 综合案例
""""
需求：
提示用户输入用户姓名，并保存到变量中
提示用户输入用户年龄，保存到变量中，并转换成整数
提示用户输入用户身高，保存到变量中，并转换成浮点数
在控制台输出用户姓名、年龄、身高对应变量的数据类型
按照以下格式输出用户信息：“姓名:xxx 年龄:xxx 身高:xxx”
在控制台输出该用户5年之后的年龄，格式：“张三 5 年之后的年龄是 25”
在控制台输出该用户现在是否成年，格式：“张三是否成年：True”
"""
# 输入姓名、年龄、身高
name = input("请输入您的姓名：")
age = int(input("请输入您的年龄："))
heigh = float(input("请输入您的身高："))
print("姓名类型:", type(name))
print("姓名类型:", type(age))
print("姓名类型:", type(heigh))
print(f"姓名:{name} 年龄:{age} 身高:{heigh}")
print(f"{name}5年之后的年龄是{age + 5}")
print(f"{name}是否成年：{age >= 18}")
